package lunbo

import (
	"server/amtf"
	"server/global"
	"gorm.io/gorm"
)

var A轮播图service = new(S轮播图service)

type S轮播图service struct{}

func (s S轮播图service) A增(model *S轮播图model) (err error) {
	err = global.GVA_DB.Create(&model).Error
	return err
}

func (s S轮播图service) A删(ids any) (err error) {
	switch ids.(type) {
	case string:
		err = global.GVA_DB.Delete(&S轮播图model{}, "id = ?", ids).Error
		return err
	case []string:
		err = global.GVA_DB.Delete(&[]S轮播图model{}, "id in ?", ids).Error
		return err
	default:
		return gorm.ErrInvalidData
	}
}

func (s S轮播图service) A删除ByIds(IDs []string) (err error) {
	err = global.GVA_DB.Delete(&[]S轮播图model{}, "id in ?", IDs).Error
	return err
}

func (s S轮播图service) A改(S轮播图model S轮播图model) (err error) {
	// err = global.GVA_DB.Model(&S轮播图model{}).Where("id = ?", S轮播图model.ID).Updates(&S轮播图model).Error
	err = global.GVA_DB.Model(&S轮播图model).Where("id = ?", S轮播图model.ID).Updates(S轮播图model).Error
	// 通过反射获取传入参数的类型信息
	// value := reflect.ValueOf(S轮播图model)
	// if value.Kind() == reflect.Pointer {
	// 	value = value.Elem()
	// }
	// modelType := value.Type()
	// fmt.Printf("modelType 👉 %+v\n", modelType)
	// 检查结构体中是否存在名为ID的字段，若不存在则返回错误
	// idField, ok := modelType.FieldByName("ID")
	// if !ok {
	// 	return fmt.Errorf("传入的结构体类型 %s 中不存在名为ID的字段", modelType.Name())
	// }

	// 使用获取到的类型信息构建更新语句
	// modelInstance := value.Interface()
	// fmt.Printf("modelInstance 👉 %+v\n", modelInstance)
	// id值 := value.FieldByName("ID").Interface()
	// fmt.Printf("id值 👉 %+v\n", id值)
	// err = global.GVA_DB.Model(modelInstance).Where("id =?", id值).Updates(&S轮播图model).Error
	// fmt.Printf("S轮播图model 👉 %+v\n", S轮播图model)
	return err
}

// A查单个 根据ID获取轮播图记录
// Author [yourname](https://github.com/yourname)
func (s S轮播图service) A查单个(ID string) (S轮播图model S轮播图model, err error) {
	err = global.GVA_DB.Where("id = ?", ID).First(&S轮播图model).Error
	return
}

// A查 分页获取轮播图记录
// Author [yourname](https://github.com/yourname)
func (s S轮播图service) A查(info S轮播图查询req) (list []S轮播图model, total int64, err error) {
	limit := info.PageSize
	offset := info.PageSize * (info.Page - 1)
	// 创建db
	db := global.GVA_DB.Model(&S轮播图model{})
	// var lunbos []S轮播图model
	// 如果有条件搜索 下方会自动创建搜索语句
	// if info.StartCreatedAt != nil && info.EndCreatedAt != nil {
	// 	db = db.Where("created_at BETWEEN ? AND ?", info.StartCreatedAt, info.EndCreatedAt)
	// }

	if info.A修改开始点 != nil && info.A修改结束点 != nil {
		db = db.Where("updated_at BETWEEN ? AND ?", info.A修改开始点, info.A修改结束点)
	} else if info.A修改开始点 != nil && info.A修改结束点 == nil {
		db = db.Where("updated_at >=?", info.A修改开始点)
	} else if info.A修改开始点 == nil && info.A修改结束点 != nil {
		db = db.Where("updated_at <=?", info.A修改结束点)
	}

	err = db.Count(&total).Error
	if err != nil {
		return
	}

	var OrderStr string
	// orderMap := make(map[string]bool)
	// orderMap["名称"] = true
	// orderMap["类别"] = true
	// if orderMap[info.Sort] {
	OrderStr = info.Sort
	OrderStr = amtf.A转小写(OrderStr)
	// OrderStr = "updated_at"
	if info.Order == "descending" {
		OrderStr = OrderStr + " desc"
	}
	db = db.Order(OrderStr)
	// }

	if limit != 0 {
		db = db.Limit(limit).Offset(offset)
	}
	err = db.Find(&list).Error
	return
}

func (s S轮播图service) GetA轮播图Public() {

}
